package com.qinyu.treehole.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.qinyu.treehole.bo.FeedBo;
import com.qinyu.treehole.entities.Feed;
import com.qinyu.treehole.entities.SimpleFeed;
import com.qinyu.treehole.vo.FeedVo;
import com.qinyu.treehole.vo.ForwardFeedVo;
import com.qinyu.treehole.vo.LoginFeedVo;
import com.qinyu.treehole.vo.LoginForwardFeedVo;

import java.util.List;

public interface FeedService extends IService<Feed> {

    /**
     * 通过用户id，获取该用户动态的count
     * @param userId
     * @return
     */
    long getUserFeedCountByUserId(Integer userId);


    long getUserFeedCountBySelfUserId(Integer userId);

    /**
     * 通过用户id，得到其下所有的动态与转发动态
     * @param userId
     * @return
     */
    List<ForwardFeedVo> getForwardFeedVoByUserId(Integer userId);

    /**
     * 通过用户id，得到其下所有的动态与转发动态, 带登录用户
     * @param userId
     * @return
     */
    List<LoginForwardFeedVo> getLoginForwardFeedVoByUserId(Integer userId, Integer uid);

    /**
     * 通过用户id，得到其下所有的动态与转发动态, 包括匿名！
     * @param userId
     * @return
     */
    List<LoginForwardFeedVo> getLoginForwardFeedVoBySelfUserId(Integer userId);

    /**
     * 把一般的feed转成带转发的feed
     * @param feeds
     * @return
     */
    List<ForwardFeedVo> parseFeedToForwardFeedVo(List<SimpleFeed> feeds);

    /**
     * 把一般的feed转成带转发的feed，带登录用户版本
     * @param feeds
     * @return
     */
    List<LoginForwardFeedVo> parseFeedToLoginForwardFeedVo(List<SimpleFeed> feeds, Integer userId);

    boolean saveFeed(FeedBo feedBo);

    void addLike(Integer userId, Integer feedId);

    void removeLike(Integer userId, Integer feedId);

    List<SimpleFeed> getForwardAndFeed();

    List<SimpleFeed> getForwardAndFeedByUserId(Integer userId);

    /**
     * 得到用户id关注的用户的feed集合
     * @param userId
     * @return
     */
    List<SimpleFeed> getForwardAndFeedByUserIdFollow(Integer userId);

    /**
     * 根据内容模糊查询所有动态，按照匹配长度排序
     * @param content '' 默认查所有！
     * @return
     */
    List<FeedVo> searchAllFeedByContent(String content);

    /**
     * 根据内容模糊查询所有动态，按照匹配长度排序
     * 这里是登录版本的，需要得到userId与这些feed的干系
     * @param content '' 默认查所有！
     * @param userId
     * @return
     */
    List<LoginFeedVo> searchAllFeedLoginByContent(String content, Integer userId);
}
